home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-19 / surfsrc3.zip / READCFG.INC < prev    next >
Text File  |  1991-09-28  |  11KB  |  415 lines

  1. { READCFG.INC: Read a SURFMODL configuration file.  This will eventually
  2.   replace READINI.
  3. }
  4. procedure READCFG (Datafile: text80; Is_surf_cfg: boolean);
  5. var Infile: text;
  6.     Realvar: vartype;
  7.     Comment: text80;
  8.     Cmmd: cmmdtype;
  9.     Parm: parmtype;
  10.     Line_num: integer;
  11.     Num: integer;
  12.     Filebad: boolean;
  13.     Surfdir: text80;
  14.     Dir: dirstr;
  15.     Name: namestr;
  16.     Ext: extstr;
  17.     ch: integer;
  18.     Done: boolean;
  19.     Version: integer;
  20.     Mat: integer;
  21.     Lite: integer;
  22.  
  23. begin
  24.  
  25.   Filebad := FALSE;
  26.   Done := FALSE;
  27.   if (Is_surf_cfg) then begin
  28.     { This is the SURFMODL.CFG file, need to set grsys & grmode }
  29.     grsys := -1;
  30.     grmode := -1;
  31.   end else begin
  32.     { Correctly name the .INI file }
  33.     fsplit (Datafile, Dir, Name, Ext);
  34.     { Save the Data file mask for other data file uses }
  35.     Filemask := Dir + Name;
  36.     Inifile := Filemask + '.INI';
  37.     Datafile := Inifile;
  38.   end;
  39.  
  40.   clrscr;
  41.   writeln ('Reading configuration file: ', Datafile);
  42.  
  43.   assign (Infile, Datafile);
  44. {$I-}
  45.   reset (Infile);
  46. {$I+}
  47.   if (ioresult <> 0) then
  48.     Filebad := TRUE;
  49.  
  50.   if (Is_surf_cfg) and (Filebad) then begin
  51.     { SURFMODL.CFG file does not exist, try the environment vbl SURFDIR }
  52.     Surfdir := getenv ('SURFDIR');
  53.     if (Surfdir <> '') then begin
  54.       Datafile := Surfdir + '\' + Datafile;
  55.       assign (Infile, Datafile);
  56. {$I-}
  57.       reset (Infile);
  58. {$I+}
  59.       if (ioresult = 0) then
  60.         Filebad := FALSE;
  61.     end;
  62.     if (Filebad) then begin
  63.       writeln ('ERROR: File ', Datafile, ' does not exist.');
  64.       halt;
  65.     end;
  66.   end; { if Is_surf_cfg }
  67.  
  68.   if (not Filebad) then begin
  69.  
  70.     Line_num := 0;
  71.     Mat := -1;
  72.     Lite := -1;
  73.     Version := 5;
  74.     while (not Filebad) and (not Done) do begin
  75.       Num := inreal (Infile, Realvar, Comment, Cmmd, Parm, Line_num, FALSE);
  76.       if (Cmmd = CMD_NONE) then
  77.         Done := TRUE
  78.       else begin
  79.         case Cmmd of
  80.           CMD_GRSYS:
  81.             { Only valid in SURFMODL.CFG file }
  82.             if (Is_surf_cfg) then begin
  83.               if (Num <> 1) then
  84.                 Filebad := TRUE
  85.               else
  86.                 grsys := round (Realvar[1]);
  87.             end else
  88.               Filebad := TRUE;
  89.  
  90.           CMD_GRMODE:
  91.             { Only valid in SURFMODL.CFG file }
  92.             if (Is_surf_cfg) then begin
  93.               if (Num <> 1) then
  94.                 Filebad := TRUE
  95.               else
  96.                 grmode := round (Realvar[1]);
  97.             end else
  98.               Filebad := TRUE;
  99.  
  100.           CMD_VERSION:
  101.             if (Num <> 1) or (Realvar[1] < 5.0) or (Realvar[1] > 5.0) then
  102.               Filebad := TRUE
  103.             else
  104.               Version := round (Realvar[1]);
  105.  
  106.           CMD_EYE:
  107.             if (Num <> 3) then
  108.               Filebad := TRUE
  109.             else begin
  110.               Xeye := Realvar[1];
  111.               Yeye := Realvar[2];
  112.               Zeye := Realvar[3];
  113.             end;
  114.  
  115.           CMD_FOCAL:
  116.             if (Num <> 3) then
  117.               Filebad := TRUE
  118.             else begin
  119.               Xfocal := Realvar[1];
  120.               Yfocal := Realvar[2];
  121.               Zfocal := Realvar[3];
  122.             end;
  123.  
  124.           CMD_MAGNIFY:
  125.             if (Num <> 1) then
  126.               Filebad := TRUE
  127.             else
  128.               Magnify := Realvar[1];
  129.  
  130.           CMD_VIEWTYPE:
  131.             if (Num <> 0) then
  132.               Filebad := TRUE
  133.             else begin
  134.               case Parm of
  135.                 PRM_STD:
  136.                   Viewtype := 0;
  137.                 PRM_XY:
  138.                   Viewtype := 1;
  139.                 PRM_XZ:
  140.                   Viewtype := 2;
  141.                 PRM_YZ:
  142.                   Viewtype := 3;
  143.                 else
  144.                   { Unknown parameter }
  145.                   Filebad := TRUE;
  146.               end; { case }
  147.             end; { if Num }
  148.  
  149.           CMD_MATL:
  150.             if (Num <> 1) or (Realvar[1]<0.0) or
  151.                 (round (Realvar[1]) > Nmatl+1) then
  152.               Filebad := TRUE
  153.             else begin
  154.               Mat := round (Realvar[1]);
  155.               if (Mat > Nmatl) then
  156.                 Nmatl := Mat;
  157.             end;
  158.  
  159.           CMD_MATCONST:
  160.             if (Num <> 3) or (Mat < 1) then
  161.               Filebad := TRUE
  162.             else begin
  163.               R1[Mat] := Realvar[1];
  164.               R2[Mat] := Realvar[2];
  165.               R3[Mat] := Realvar[3];
  166.             end;
  167.  
  168.           CMD_MATCOLOR:
  169.             if (Num <> 1) or (Mat < 1) or (Realvar[1] < 0.0) then
  170.               Filebad := TRUE
  171.             else
  172.               Color[Mat] := round (Realvar[1]);
  173.  
  174.           CMD_MATAMBIENT:
  175.             if (Num <> 1) or (Mat < 1) then
  176.               Filebad := TRUE
  177.             else
  178.               Ambient[Mat] := Realvar[1];
  179.  
  180.           CMD_MATRGB:
  181.             if (Num <> 3) or (Mat < 1) then
  182.               Filebad := TRUE
  183.             else begin
  184.               Redmax[Mat] := round (Realvar[1]);
  185.               Grnmax[Mat] := round (Realvar[2]);
  186.               Blumax[Mat] := round (Realvar[3]);
  187.             end;
  188.  
  189.           CMD_LIGHT:
  190.             if (Num <> 1) or (Realvar[1] < 1.0) or
  191.                 (round (Realvar[1]) > Nlite+1) then
  192.               Filebad := TRUE
  193.             else begin
  194.               Lite := round (Realvar[1]);
  195.               if (Lite > Nlite) then
  196.                 Nlite := Lite;
  197.             end;
  198.  
  199.           CMD_LTCOORD:
  200.             if (Num <> 3) or (Lite < 1) then
  201.               Filebad := TRUE
  202.             else begin
  203.               Xlite[Lite] := Realvar[1];
  204.               Ylite[Lite] := Realvar[2];
  205.               Zlite[Lite] := Realvar[3];
  206.             end;
  207.  
  208.           CMD_LTINTENS:
  209.             if (Num <> 1) then
  210.               Filebad := TRUE
  211.             else
  212.               Intensity[Lite] := Realvar[1];
  213.  
  214.           CMD_GOURAUD:
  215.             if (Num <> 1) then
  216.               Filebad := TRUE
  217.             else begin
  218.               if (Realvar[1] > 0.0) then begin
  219.                 Epsilon := Realvar[1];
  220.                 Interpolate := TRUE;
  221.               end else
  222.                 Interpolate := FALSE;
  223.             end;
  224.  
  225.           CMD_SHADOWING:
  226.             if (Num <> 0) then
  227.               Filebad := TRUE
  228.             else begin
  229.               case Parm of
  230.                 PRM_ON:
  231.                   Shadowing := TRUE;
  232.                 PRM_OFF:
  233.                   Shadowing := FALSE;
  234.                 else
  235.                   { Unknown parameter }
  236.                   Filebad := TRUE;
  237.               end;
  238.             end; { if Num }
  239.  
  240.           CMD_AXISSHOW:
  241.             if (Num <> 0) then
  242.               Filebad := TRUE
  243.             else begin
  244.               case Parm of
  245.                 PRM_ON:
  246.                   Showaxes := 1;
  247.                 PRM_OFF:
  248.                   Showaxes := 0;
  249.                 else
  250.                   { Unknown parameter }
  251.                   Filebad := TRUE;
  252.               end;
  253.             end; { if Num }
  254.  
  255.           CMD_AXISLEN:
  256.             if (Num <> 3) then
  257.               Filebad := TRUE
  258.             else begin
  259.               Xaxislen := Realvar[1];
  260.               Yaxislen := Realvar[2];
  261.               Zaxislen := Realvar[3];
  262.             end;
  263.  
  264.           CMD_AXISCOLOR:
  265.             if (Num <> 1) or (Realvar[1]<0.0) or (Realvar[1]>15) then
  266.               Filebad := TRUE
  267.             else
  268.               Axiscolor := round (Realvar[1]);
  269.  
  270.           CMD_DITHER:
  271.             if (Num <> 1) then
  272.               Filebad := TRUE;
  273.             { Option no longer supported - Mono := FALSE always }
  274.  
  275.           CMD_RANDOM:
  276.             if (Num <> 1) then
  277.               Filebad := TRUE
  278.             else begin
  279.               if (Realvar[1] > 0.0) then begin
  280.                 Randshade := Realvar[1];
  281.                 Dorandom := TRUE;
  282.               end else
  283.                 Dorandom := FALSE;
  284.             end;
  285.  
  286.           CMD_BORDERS:
  287.             if (Num <> 0) then
  288.               Filebad := TRUE
  289.             else begin
  290.               case Parm of
  291.                 PRM_ON:
  292.                   ShowAllBorders := 1;
  293.                 PRM_OFF:
  294.                   ShowAllBorders := 0;
  295.                 else
  296.                   { Unknown parameter }
  297.                   Filebad := TRUE;
  298.               end;
  299.             end; { if Num }
  300.  
  301.           CMD_TEXTCOL:
  302.             if (Num <> 1) then
  303.               Filebad := TRUE
  304.             else
  305.               Textcol := round (Realvar[1]);
  306.  
  307.           CMD_BGCOL:
  308.             if (Num <> 1) then
  309.               Filebad := TRUE
  310.             else
  311.               BGcol := round (Realvar[1]);
  312.  
  313.           CMD_GRAPHTEXT:
  314.             if (Num <> 1) then
  315.               Filebad := TRUE
  316.             else
  317.               Graphcol := round (Realvar[1]);
  318.  
  319.           CMD_REVVIDEO:
  320.             if (Num <> 0) then
  321.               Filebad := TRUE
  322.             else begin
  323.               case Parm of
  324.                 PRM_ON:
  325.                   RevVideo := TRUE;
  326.                 PRM_OFF:
  327.                   RevVideo := FALSE;
  328.                 else
  329.                   { Unknown parameter }
  330.                   Filebad := TRUE;
  331.               end;
  332.             end; { if Num }
  333.  
  334.           CMD_SHOWTITLE:
  335.             if (Num <> 0) then
  336.               Filebad := TRUE
  337.             else begin
  338.               case Parm of
  339.                 PRM_ON:
  340.                   ShowTitle := TRUE;
  341.                 PRM_OFF:
  342.                   ShowTitle := FALSE;
  343.                 else
  344.                   { Unknown parameter }
  345.                   Filebad := TRUE;
  346.               end;
  347.             end; { if Num }
  348.  
  349.           CMD_XYADJUST:
  350.             if (Num <> 1) then
  351.               Filebad := TRUE
  352.             else
  353.               XYadjust := Realvar[1];
  354.  
  355. (* FOLLOWING COMMANDS WILL BE MOVED TO READFILE:
  356.           CMD_TITLE:
  357.             { The title was stored in the comment field }
  358.             if (Num <> 0) then
  359.               Filebad := TRUE
  360.             else
  361.               Flpurpose := Comment;
  362.  
  363.           CMD_MAXVERT:
  364.             if (Num <> 1) then
  365.               Filebad := TRUE
  366.             else
  367.               Maxvert := round (Realvar[1]);
  368.  
  369.           CMD_NSIDES:
  370.             if (Num <> 1) then
  371.               Filebad := TRUE
  372.             else
  373.               Nsides := round (Realvar[1]);
  374.  
  375.           CMD_NODES:
  376.             if (Num <> 1) then
  377.               Filebad := TRUE
  378.             else
  379.               Nnodes := round (Realvar[1]);
  380.  
  381.           CMD_SURFACES:
  382.             if (Num <> 1) then
  383.               Filebad := TRUE
  384.             else
  385.               Nsurf := round (Realvar[1]);
  386.  
  387. END OF READFILE COMMANDS *)
  388.  
  389.           else  { INVALID or NONE }
  390.             Filebad := TRUE;
  391.         end; { case Cmmd }
  392.       end; { if Num = 0 }
  393.  
  394.     end; { while }
  395.  
  396.     close (Infile);
  397.     if (Filebad) then begin
  398.       writeln ('Error found in line ', Line_num, ' of ', Datafile);
  399.       if (Is_surf_cfg) then
  400.         halt(1)
  401.       else begin
  402.         write ('Press any key to continue: ');
  403.         ch := getkey;
  404.       end;
  405.     end; 
  406.  
  407.   end; { if Filebad }
  408.  
  409.   if (Is_surf_cfg) and ((Grsys < 0) or (Grmode < 0)) then begin
  410.     writeln ('ERROR: Missing GRSYS or GRMODE in ', Datafile);
  411.     halt(1);
  412.   end;
  413.  
  414. end; { procedure READCFG }
  415.